home *** CD-ROM | disk | FTP | other *** search
/ Day Cry / Day Cry CD.bin / oh_towns / fjcha / omake / sc.asm next >
Assembly Source File  |  1994-09-20  |  5KB  |  240 lines

  1. ;*************************************************
  2. ;*                                               *
  3. ;*          âX âN âì ü[ âï  âT âô âv âï          *
  4. ;*                                               *
  5. ;*     1994. 9. 10              by é┐éσéαéτé±é▄  *
  6. ;*                                               *
  7. ;*************************************************
  8.  
  9.         .386
  10.  
  11. ;***************  âZâOâüâôâgè╓îW  ****************
  12. VRAM2        equ    0104h
  13. TBIOS        equ    0110h
  14.  
  15. ;*************** ânü[âhâEâFâAè╓îW ****************
  16. DotsInByte    equ    2
  17. ScreenMaxX    equ    1024
  18. ScreenMaxY    equ    511
  19. LineSize    equ    ScreenMaxX / DotsInByte
  20.  
  21. ;***************   éaéhénérè╓îW   ****************
  22. EndProcess    equ    4ch
  23.  
  24. EGB_workSize    equ    1536
  25. EGB        equ    20h
  26. EGB_resolution    equ    01h
  27. NormalMode    equ    03h
  28.  
  29. MOS_workSize    equ    4096
  30. MOS        equ    40h
  31. MOS_entry    equ    48h
  32. ON        equ    1
  33. OFF        equ    0
  34. MOS_start    equ    00h
  35. MOS_end        equ    01h
  36. MOS_disp    equ    02h
  37. MOS_rdpos    equ    03h
  38.  
  39. LeftButton    equ    01h
  40. RightButton    equ    02h
  41.  
  42. ;******************** é╗é╠æ╝ *********************
  43. ScrollAreaX    equ    500
  44. ScrollAreaY    equ    300
  45.  
  46. ;***************** âÅü[âNâGâèâA ******************
  47.         assume    ds:data
  48. data        segment
  49. EGB_work    db    EGB_workSize dup( ? )
  50. MOS_work    db    MOS_workSize dup( ? )
  51. refuge        db    LineSize dup( ? )
  52. data        ends
  53.  
  54.         assume    cs:code
  55. code        segment
  56.  
  57. main        proc
  58.  
  59.         mov    ax , TBIOS
  60.         mov    fs , ax
  61.         mov    ax , ds
  62.         mov    gs , ax
  63.  
  64. ;*---------------- ëµû╩Åεò±É▌ÆΦ ------------------
  65.         mov    ah , EGB_resolution
  66.         mov    al , 0
  67.         mov    dx , NormalMode
  68.         mov    edi , offset EGB_work
  69.         call    pword ptr fs:[ EGB ]
  70.  
  71. ;*------------- â}âEâXéaéhénérïNô« ---------------
  72.         mov    ah , MOS_start
  73.         mov    ecx , MOS_workSize
  74.         mov    edi , offset MOS_work
  75.         call    pword ptr fs:[ MOS ]
  76.  
  77. ;*------------- â}âEâXâJü[â\âïò\Ī ---------------
  78.         mov    ah , MOS_disp
  79.         mov    al , ON
  80.         call    pword ptr fs:[ MOS ]
  81.  
  82. ;***************** âüâCâôâïü[âv ******************
  83.  
  84. #main_loop:
  85. ;*------- â}âEâXé╠ê╩Æué╞â{â^âôé╠ô╟é▌ĵéΦ ---------
  86.         call    pword ptr fs:[ MOS_entry ]
  87.         mov    ah , MOS_rdpos
  88.         call    pword ptr fs:[ MOS ]
  89.  
  90.         call    mystery
  91.  
  92. ;*-------------- ëEâ{â^âôé╠â`âFâbâN --------------
  93.         test    ch , RightButton
  94.         jnz    short #finish
  95.  
  96. ;*-------------- ì╢â{â^âôé╠â`âFâbâN --------------
  97.         test    ch , LeftButton
  98.         jz    short #main_loop
  99.  
  100. ;*----------------- âXâNâìü[âï -------------------
  101.         movsx    edx , dx         ; 32bitë╗
  102.         movsx    ebx , bx
  103.         and    edx , 0fffffffeh ; ï⌠Éöë╗
  104.         and    ebx , 0fffffffeh
  105.         call    scroll
  106.         jmp    short #main_loop
  107.  
  108. ;-------------- â}âEâXéaéhénérÅIù╣ ---------------
  109. #finish:
  110.         mov    ah , MOS_end
  111.         call    pword ptr fs:[ MOS ]
  112.  
  113.         mov    ah , EndProcess
  114.         int    21h
  115.  
  116. main        endp
  117.  
  118. ;*------------------- ü`ôΣü` ---------------------
  119. mystery        proc
  120.         push    fs
  121.         push    eax
  122.  
  123.         push    dword ptr VRAM2
  124.         pop    fs
  125.  
  126.         shrd    eax , edx , 4
  127.         shrd    eax , edx , 4
  128.         shrd    eax , edx , 4
  129.         shrd    eax , edx , 4
  130.         shrd    eax , edx , 4
  131.         shrd    eax , edx , 4
  132.         shrd    eax , edx , 4
  133.         shrd    eax , edx , 4
  134.  
  135.         mov    fs:[0         ],eax
  136.         mov    fs:[LineSize  ],eax
  137.         mov    fs:[LineSize*2],eax
  138.         mov    fs:[LineSize*3],eax
  139.         mov    fs:[LineSize*4],eax
  140.  
  141.         pop    eax
  142.         pop    fs
  143.         ret
  144. mystery        endp
  145.  
  146. ;****************** âXâNâìü[âï *******************
  147.  
  148. ;*------------------ êΩìsô]æù --------------------
  149. linetrans    proc
  150.         push    ecx
  151.         push    esi
  152.         push    edi
  153.         rep movsd
  154.         pop    edi
  155.         pop    esi
  156.         pop    ecx
  157.         ret
  158. linetrans    endp
  159.  
  160. scroll        proc
  161.  
  162.         push    gs
  163.         push    fs
  164.         push    es
  165.         pushad
  166.  
  167. ;*------ ëµû╩é⌐éτé═é▌Åoé╡é─éóé╚éóé⌐â`âFâbâN ------
  168.         cmp    edx , ScreenMaxX - ScrollAreaX
  169.         jbe    short #x_ok
  170.         mov    edx , ScreenMaxX - ScrollAreaX
  171. #x_ok:
  172.         cmp    ebx , ScreenMaxY - ScrollAreaY
  173.         jbe    short #y_ok
  174.         mov    ebx , ScreenMaxY - ScrollAreaY
  175. #y_ok:
  176.  
  177. ;*------------ âîâWâXâ^é╠Ælé≡É▌ÆΦ ----------------
  178.  
  179. ; EDI <=   EBX       * LineSize + EDX / 2
  180. ; ESI <= ( EBX + 1 ) * LineSize + EDX / 2
  181. ; ECX <= ScrollAreaX / 4
  182.  
  183.         shr    edx , 1
  184.         imul    ebx , LineSize
  185.         lea    edi , [ ebx + edx ]
  186.         mov    esi , edi
  187.         add    esi , LineSize
  188.         mov    ecx , ScrollAreaX / 8
  189.  
  190. ;*----------------- ì┼ÅπÆié≡æ▐ö≡ -----------------
  191.  
  192.         push    ds
  193.  
  194.         mov    ax , ds
  195.         mov    es , ax
  196.         mov    ax , VRAM2
  197.         mov    ds , ax
  198.         push    edi
  199.         mov    edi , offset refuge
  200.         call    LineTrans
  201.         pop    edi
  202.  
  203. ;*------------------ âXâNâìü[âï ------------------
  204.         mov    ax , VRAM2
  205.         mov    es , ax
  206.  
  207.         mov    ebx , ScrollAreaY
  208. #scrolling_loop:
  209.         call    LineTrans
  210.         add    edi , LineSize
  211.         add    esi , LineSize
  212.         dec    ebx
  213.         jnz    short #scrolling_loop
  214.  
  215. ;*----------------- ì┼ÅπÆié≡ò£ïA -----------------
  216.  
  217.         pop    ds
  218.  
  219.         mov    esi , offset refuge
  220.         call    LineTrans
  221.  
  222.         popad
  223.         pop    es
  224.         pop    fs
  225.         pop    gs
  226.         ret
  227.  
  228. scroll        endp
  229.  
  230. code        ends
  231.  
  232.  
  233. ;***************** âXâ^âbâNÉ▌ÆΦ ******************
  234.         assume    ss:stack
  235. stack        segment stack
  236.         db    2000 dup( ? )
  237. stack        ends
  238.  
  239.         end    main
  240.